Міністерство Освіти і Науки України
Національний Університет “Львівська Політехніка”
Кафедра ЕОМ
ЗВІТ
до лабораторної роботи № 1
з курсу “Паралельні та розподілені обчислення ”
Тема: ВИКОРИСТАННЯ ФУНКЦІОНАЛЬНОЇ ДЕКОМПОЗИЦІЇ ДЛЯ РОЗВ’ЯЗКУ ОБЧИСЛЮВАЛЬНИХ ЗАДАЧ.
Мета: Вивчити методи декомпозицій задач. Набути навиків розв’язування задач з використанням функціональної декомпозиції.
ЗМІСТ ЗВІТУ
1.Тема, мета, аналіз завдання(згідно варіанту).
2. Схема декомпозиції задачі та коментарі до неї.
3. Текст програми та результат її роботи на довільному наборі вхідних даних, для розмірності n>3.
4. Висновки.
Аналіз завдання
Завдання:
Варіант №25 число,
Де y1, y2, Y3, b, Cij обчислюються так:
y1 = A*b, де bi = 25 - для парних і, bi=25/і3 - для непарних і=1,2,...n
y2 = A1 (b1 + c1)
Y3 = A2 (С2 +В2 ) , де Cij =25/(i + j)3
Виконання:
Дані які вводяться з клавіатури:
розмірність матриць – n;
матриці A, A1, A2, B2 ;
вектори-стовпці b1,c1 .
Ці дані треба вводити з клавіатури, або генерувати випадковим чином n –генерувати не треба. Елементи матриць та векторів є цілими додатними числами, більшими за нуль.
Вектор-стовпець b та матриця C2 обраховуються, відповідно до розмірності, значення їх елементів завжди менші одиниці і різко зменшуються зі збільшенням розмірності n.
Під час обчислення y1 результатом множення матриці А на вектор-стовпець b має бути вектор-стовпець, елементами, якого є дробові числа.
Під час обчислення y2 результатом додавання двох вектор-стовпців буде вектор-стовпець.
При множенні матриці А1 на результат додавання b1+c1, отримаємо вектор-стовпець.
При обчисленні Y3 отримаємо матрицю з дробових чисел.
В обчисленні загального виразу приймають участь три різні елементи – два вектори стовпці y1, y2 та матриця Y3.
Остаточним результатом є число.
Схема декомпозиції задачі
Код програми
//matrix.cpp
#include "matrix.h"
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <assert.h>
#include <iomanip>
#include <stdlib.h>
#include <shlwapi.h>
using namespace std;
Calculate_Matrix::Calculate_Matrix(const int i,const int j)
{
x=i; y=j;
mas = new double*[x];
for(int k=0;k<=x;k++)
{
mas[k] = new double[y];
}
}
void Calculate_Matrix::put(const int i, const int j,const double z)
{
mas[i][j]=(double )z;
}
double Calculate_Matrix::get( int i, int j)
{
return mas[i][j];
}
void Calculate_Matrix::madd(const Calculate_Matrix a, const Calculate_Matrix b)
{
for(int k=0; k<a.x; k++)
for(int m=0; m<a.y; m++)
mas[k][m] = a.mas[k][m]+b.mas[k][m];
}
void Calculate_Matrix::transp(const Calculate_Matrix a)
{
for(int k=0; k<y; k++)
mas[0][k] = a.mas[k][0];
}
void Calculate_Matrix::mmul(const Calculate_Matrix a, const Calculate_Matrix b)
{
Calculate_Matrix(a.x,b.y);
for(int i=0; i<a.x; i++)
for(int j=0; j<b.y; j++)
{
double s=0;
for(int k=0; k<a.y; k++)
s+=a.mas[i][k]*b.mas[k][j];
mas[i][j]=s;
}
}
void Calculate_Matrix::print()
{
for(int k=0; k<x; k++)
{
for(int m=0; m<y; m++)
cout<<setw(15)<<fixed<<mas[k][m]<<" ";
cout<<endl;
}
cout<<endl;;
}
bool isNumber(const string str)
{
unsigned length = str.length();
for (unsigned i=0; i<length; ++i) if(str[i]>'9' || str[i]<'0') return false;
return true;
}
void Calculate_Matrix::input()
{
int mn;
char ch[64];
for(int i=0; i<x; i++)
for(int j=0; j<y; j++)
{
cout<<endl<<"element ["<<i<<"]["<<j<<"]=";
cin>>ch;
if(isNumber(ch))
{
mn = atoi(ch);
mas[i][j]=mn;
}
else
{
cout << "Vvedit' chyslo"<<endl;
cout<<endl<<"element ["<<i<<"]["<<j<<"]=";
cin>>ch;
mn = atoi(ch);
mas[i][j]=mn;
}
}
cout<<endl;
}
//main.cpp
#include <iostream>
#include <stdlib.h>
#include "matrix.h"
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <ctype.h>
using namespace std;
int main(int argc, char* argv[])
{
int i,j;
int n;...